package session;

import entity.Wish;
import java.util.List;
import javax.ejb.Remote;

/**
 * Rappresenta il gestore delle transazioni degli entity Wish.
 *
 * @author Rachid Ouchary, Fabio Strocco, Max Passaghe, Marco Tansini.
 */
@Remote
public interface WishFacadeRemote {

    /**
     * Rende persistente un nuovo desiderio.
     *
     * @param wish il desiderio da rendere persistente.
     */
    public void create(Wish wish);

    /**
     * Aggiorna lo stato del desiderio nel DB allo stato dell desiderio passato
     * come parametro.
     *
     * @param wish il desiderio da aggiornare.
     */
    public void edit(Wish wish);

    /**
     * Rimuove un desiderio dal DB.
     *
     * @param wish il desiderio da rimuovere.
     */
    public void remove(Wish wish);

    /**
     * Carica il desiderio con l'id specificato.
     *
     * @param id l'id del desiderio da caricare.
     * @return il desiderio con l'id specificato, <code>null</code> se non esiste nel
     * DB.
     */
    public Wish find(Long id);

    /**
     * Cerca il desiderio nel database e lo restituice.
     * Questo metodo &egrave utile se desiderio passato come parametro &egrave
     * null.
     *
     * @param wish il desiderio da cercare nel database.
     * @return il desiderio passato come parametro con id != null o <code>null</code>
     * se il desiderio non esiste nel database.
     */
    public Wish findWish(Wish wish);

    /**
     * Modifica il desiderio.
     *
     * @param wish il desiderio da modificare.
     * @param priority la nuova priorit&agrave del desiderio.
     * @param voto il nuovo voto del desiderio.
     */
    public void modificaDesiderio(Wish wish, Integer priority, Integer voto);

    /**
     * Prenota il desiderio.
     *
     * @param wish il desiderio.
     */
    public void prenota(Wish wish);

    /**
     *
     * @return
     */
    public List<Wish> findAll();

    /**
     *
     * @param range
     * @return
     */
    public List<Wish> findRange(int[] range);

    /**
     *
     * @return
     */
    public int count();
}
